package com.naiterui.ehp.bs.im.repository.mongo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;

import com.naiterui.ehp.bs.im.network.protocl.Shield;
import com.naiterui.ehp.bs.im.vo.ShieldVO;

/**
 * @author He Qiang
 * @since 1.0.0
 */
@Repository
public class ShieldDao extends MongoBaseDao {

    /**
     * 屏蔽患者的collectionName
     */
    private static final String COLLECTION_NAME_SHIELD = "m_shield";

    /**
     * 保存医生 病人屏蔽关系
     * @Author He Qiang
     * @Date 2015年12月2日
     * @since 1.0.0
     * @param patientDisturb
     */
    public void saveShield(Shield patientDisturb) {
        super.save(patientDisturb, COLLECTION_NAME_SHIELD);
    }

    /**
     * 删除医生病人屏蔽关系
     * @Author He Qiang
     * @Date 2015年12月2日
     * @since 1.0.0
     * @param userId
     * @param shieldId
     */
    public void removeShield(Long userId, Long shieldId) {
        super.remove(new Query(Criteria.where("userId").is(userId).and("shieldId").is(shieldId)), COLLECTION_NAME_SHIELD);
    }

    /**
     * 医生对病人的屏蔽关系
     * @Author He Qiang
     * @Date 2015年12月2日
     * @since 1.0.0
     * @param userId
     * @param shieldId
     * @return
     */
    public Shield findShield(Long userId, Long shieldId) {
        Shield result = super.findOne(new Query(Criteria.where("userId").is(userId).and("shieldId").is(shieldId)), Shield.class,
                                      COLLECTION_NAME_SHIELD);
        return result;
    }

    /**
     * 获取屏蔽列表
     * @Author He Qiang
     * @Date 2015年12月2日
     * @since 1.0.0
     * @param userId
     * @return
     */
    public ShieldVO findShieldList(Long userId) {

        List<Shield> result = super.find(new Query(Criteria.where("userId").is(userId)), Shield.class, COLLECTION_NAME_SHIELD);

        ShieldVO shieldVO = null;

        if (result != null && result.size() > 0) {
            shieldVO = new ShieldVO();
            List<Long> list = new ArrayList<Long>();

            for (Shield shield : result) {
                list.add(shield.getShieldId());
            }
            shieldVO.setUsers(list);
        }
        return shieldVO;
    }

}
